package com.hds.modules.app.controller;

import com.hds.common.annotation.SysLog;
import com.hds.common.exception.RRException;
import com.hds.common.utils.PageUtils;
import com.hds.common.utils.R;
import com.hds.common.validator.Assert;
import com.hds.modules.app.annotation.Login;
import com.hds.modules.app.annotation.LoginUser;
import com.hds.modules.app.entity.UserEntity;
import com.hds.modules.app.entity.UserMessage;
import com.hds.modules.app.service.MessageMainBodyService;
import com.hds.modules.app.service.UserMessageService;
import com.hds.modules.app.service.UserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.Map;

/**
 * 用户留言回复
 */
@RestController
@RequestMapping("/app/ly/reply")
public class MessageReplyController {
	Logger logger = LoggerFactory.getLogger(MessageReplyController.class);
	
	@Resource
	private UserService userProfileService;
	
	@Resource
	private UserMessageService userMessageService;
	
	@Resource
	private MessageMainBodyService messageMainBodyService;
	
	/** The Constant PAGE_SIZE. */
	public static final String PAGE_SIZE ="10";
	
	
	/**
	 * ==============================留言==============================
	 */
	/**
	 * 【message.save】
	 *String content, String major,String demand,@RequestParam("imgs[]") String[] imgs,Integer mainbody
	 */
	@Login
	@PostMapping("/save")
	public R save(@LoginUser UserEntity user, @RequestBody UserMessage message) {
		logger.info("留言提交入参:{}", message.toString());
		try {
			message.setType(UserMessage.TYPE_MSG);
			message.setUid(String.valueOf(user.getUserId()));
			userMessageService.save(message);
			return R.ok("留言提交成功");
		}catch(Exception e){
			throw new RRException("留言提交失败");
		}
	}
	
	/**
	 * 【message.update】
	 */
	@RequestMapping("/update")
	public boolean update(UserMessage message) {
		userMessageService.update(message);
		return true;
	}
	
	/**
	 * 【message.save】
	 *
	 */
	@Login
	@RequestMapping("/delete/{id}")
	public R delete(@LoginUser UserEntity user, @PathVariable("id") Integer id) {
		Assert.isNull(id, "id不能为空");
		try {
			UserMessage userMessage = userMessageService.get(id);
			if(userMessage == null){
				throw new RRException("该条留言记录不存在");
			}
			logger.info("留言记录：{}", userMessage.toString());
			userMessage.setStatus(UserMessage.STATUS_DELETED);
			userMessageService.update(userMessage);
			return R.ok();
		}catch(RRException e){
			throw new RRException("删除失败");
		}
	}
	
	/**
	 * 【message.get】
	 *
	 */
	@Login
	@RequestMapping("/get/{id}")
	public R get(@LoginUser UserEntity user, @PathVariable("id") Integer id) {
		UserMessage mr=userMessageService.get(id);
		mr.setAvatar(user.getAvatar());
		mr.setUsername(user.getUsername());
		mr.setMobile(user.getMobile());

		logger.info("留言实体信息mr:{}", mr);
		if(mr!=null){
			String imgStr=mr.getImgsStr();
			logger.info("imgStr:{}", imgStr);
			if(!"".equals(imgStr)){
				mr.setImgs(imgStr.split(","));
			}
			return R.ok().put("data", mr);
		}
		return R.error();
	}
	
	/**
	 * 【user.message.pagelist】 用户消息分页
	 * 
	 * op{all:所有留言分组}
	 * op{max:最新留言分组}
	 * op{web:微官网最新留言分组}
	 * 
	 * @param currPage 请求页,默认第一页
	 * @param targPage 请求页,默认第一页
	 * @param pageSize 每页条数,默认10
	 */
	/**
	 * 所有company列表
	 */
	@Login
	@GetMapping("/list")
	public R list(@LoginUser UserEntity user, @RequestParam Map<String, Object> params){
		logger.info("当前用户id:{}", user.getUserId());
		params.put("uid", String.valueOf(user.getUserId()));
		PageUtils page = userMessageService.queryPage(params);

		return R.ok().put("page", page);
	}
//	@RequestMapping("user.{op}.message.pagelist")
//	public PageInfo<UserMessage> messagePagelist(
//			@RequestParam(value="notReply", required=false) String type,
//			@PathVariable("op") String op,
//			@RequestParam(required = false, defaultValue = "") String status, //状态【已回复，未回复，已删除】
//			@RequestParam(value="mainBody", required=false) String mainBody,
//			@RequestParam(value="uid", required=false) String uid,
//			@RequestParam(required = false, defaultValue = "1") int currPage,
//			@RequestParam(required = false, defaultValue = "1") int targPage,
//			@RequestParam(required = false, defaultValue = PAGE_SIZE) int pageSize){
//		if("all".equals(op) && uid==null){
//			new Throwable("请输入用户uid");
//		}
//		return userMessageService.listByPage(status, type, op, mainBody, uid, currPage, targPage, pageSize);
//	}
	
	/**
	 * 【消息回复】uid=6&messageCnt=回复内容&mainBodyUid=2&major=2
	 * content=留言内容&major=2&demand=1&imgs=2&mainbody=1
	 */
//	@RequestMapping("user.message.reply")
//	public R messageReply(UserMessage reply){
//		MsgMainBody main = messageMainBodyService.get(reply.getMainBodyUid());
//		if(reply!=null){
//			if(reply.getMainBodyUid()==null || "".equals(reply.getMainBodyUid())
//					|| reply.getMessageCnt() == null || "".equals(reply.getMessageCnt())){
//				return R.error("主体id和内容不能为空。");
//			}
//			if(main==null){
//				return R.error("该主体不存在，请先设置主体。");
//			}
//			if(reply.getUid()==null || "".equals(reply.getUid())){
//				return R.error("用户uid不能为空。");
//			}
//			UserMessage user = userProfileService.get(reply.getUid());
//			UserMessage userMsg = userMessageService.findMaxOneMessageAndMajorNoutNull(reply.getUid());
//			if(userMsg==null){
//				return R.error("用户首次留言的专业为空！");
//			}
//			if(user!=null){
//				reply.setUid(user.getUid());
//				reply.setOpenid(user.getWxUserOpenid());
//				reply.setMajor(userMsg.getMajor()); //专业
//				reply.setType(UserMessage.TYPE_REPLY); //类型：消息回复
//				reply.setStatus(UserMessage.STATUS_REPLIED); //状态：已回复
//			}else{
//				return R.error("未查询到该用户。");
//			}
//
//			userMessageService.save(reply);
//			boolean b=WxTemplateNotice.sendTemplateNotice(user.getWxUserOpenid(), reply.getMessageCnt(), main.getName(), userMsg.getMajor(), new Date().toString() ); // 微信模版消息通知
//			if(b){
//				UserMessage u= userMessageService.findMaxOne(user.getUid());
//				u.setStatus(UserMessage.STATUS_REPLIED);
//				userMessageService.update(u);
//				return R.ok("微信模版消息通知成功");
//			}else{
//				return R.error("微信模版消息通知失败");
//			}
//		}
//		return R.error("系统出错，reply为null");
//
//	}
	
	
	

}
